<template>
  <view class="page">
    <!-- 表单组件 -->
    <mes-form :mesForm="mesFormTop" ref="formTopRef"></mes-form>
    <mes-tip type="examine" v-if="status == '1'"></mes-tip>
    <!-- 扫码添加 -->
    <mes-choose-goods :top="top" type="productions"></mes-choose-goods>
    <!-- 商品列表  -->
    <mes-goods :form="mesGoodsForm" @edit="editGoods" @delete="delGoods">
    </mes-goods>
    <!-- 备注 -->
    <mes-form :mesForm="remark"></mes-form>

    <!-- 重置 -->
    <mes-button type="2" :form="buttonFrom"></mes-button>
  </view>
</template>

<script>
export default {
  data() {
    return {
      clerkHasMore: true,
      MandatorHasMore: true,
      clerkForm: {
        page: 1,
        limit: 8,
        status: 1
      },
      mandatorForm: {
        page: 1,
        limit: 8,
        status: 1
      },
      workshop: [], //车间过滤出的
      status: '', //当前审核状态
      id: '', //当前数据id
      mesGoodsForm: {
        numberUnitField: 'unit_name', //数量单位
        priceField: 'purchase' //单价
      },
      remark: {
        top: 20,
        row: {
          remark: ''
        },
        items: [
          {
            title: '备注',
            slots: {
              field: 'remark',
              type: 'input'
            }
          }
        ]
      },
      top: 20, //扫码添加
      mesFormTop: {
        top: 20,
        row: {},
        items: [
          {
            title: '生产计划',
            required: true,
            slots: {
              field: 'plan_code',
              icon: 'arrow'
            },
            rules: [
              {
                type: 'required',
                message: '请选择生产计划编号'
              }
            ],
            tap: () => {
              uni.navigateTo({ url: '/pages/home/productions/choice' })
            }
          },
          {
            title: '生产单号',
            required: true,
            slots: {
              field: 'purchase_code',
              type: 'input'
            },
            rules: [
              {
                type: 'required',
                message: '请输入生产单号'
              }
            ]
          },
          {
            title: '单据日期',
            required: true,
            slots: {
              field: 'purchase_time',
              type: 'date'
            },
            rules: [
              {
                type: 'required',
                message: '请选择单据时间'
              }
            ]
          },
          {
            title: '开工时间',
            required: true,
            slots: {
              field: 'work_time',
              type: 'date',
              date_type: 'datetime'
            },
            rules: [
              {
                type: 'required',
                message: '请选择开工时间'
              }
            ]
          },
          {
            title: '完工时间',
            required: true,
            slots: {
              field: 'finish_time',
              type: 'date',
              date_type: 'datetime'
            },
            rules: [
              {
                type: 'required',
                message: '请选择完工时间'
              }
            ]
          },
          {
            title: '车间',
            slots: {
              field: 'workshop_name',
              type: 'select',
              icon: 'arrow',
              showSelect: () => {
                this.resetPaging1()
                this.getWorkShop()
              },
              select: {
                search: true,
                placeholder: '请输入关键词',
                options: [],
                searchEvent: (keyword) => {
                  this.getWorkShop(keyword)
                  this.resetPaging1()
                },
                scrolltoupper: () => {
                  if (this.mandatorForm.page > 0) {
                    this.mandatorForm.page--
                  }
                  this.getWorkShop()
                },
                scrolltolower: () => {
                  if (!this.MandatorHasMore) return
                  this.mandatorForm.page++
                  this.getWorkShop()
                },
                changeEvent: (item) => {
                  this.mesFormTop.row.workshop_id = item.id
                  this.mesFormTop.row.workshop_name = item.name
                }
              }
            }
          },
          {
            title: '生产工人',
            slots: {
              field: 'work_name',
              type: 'select',
              icon: 'arrow',
              showSelect: () => {
                this.resetPaging()
                this.getClerk()
              },
              select: {
                search: true,
                placeholder: '请输入关键词',
                options: [],
                searchEvent: (keyword) => {
                  this.getClerk(keyword)
                  this.resetPaging()
                },
                scrolltoupper: () => {
                  if (this.clerkForm.page > 0) {
                    this.clerkForm.page--
                  }
                  this.getClerk()
                },
                scrolltolower: () => {
                  if (!this.clerkHasMore) return
                  this.clerkForm.page++
                  this.getClerk()
                },
                changeEvent: (item) => {
                  this.mesFormTop.row.work_id = item.id
                  this.mesFormTop.row.work_name = item.name
                }
              }
            }
          }
        ]
      },
      buttonFrom: {
        confirmEvent: () => {
          this.saveData()
        },
        text: '保存'
      }
    }
  },
  methods: {
    // 重置分页
    resetPaging1() {
      this.MandatorHasMore = true
      this.mandatorForm.page = 1
      this.mesFormTop.items[5].slots.select.options = []
    },
    resetPaging() {
      this.clerkHasMore = true
      this.clerkForm.page = 1
      this.mesFormTop.items[6].slots.select.options = []
    },
    //获取商品
    getGoods() {
      if (this.mesFormTop.row.plan_code) {
        this.$api.prod.outsourcing
          .planinfo({
            purchase_code: this.mesFormTop.row.plan_code
          })
          .then((res) => {
            let info_list = []
            if (res.code == 200) {
              res.data.forEach((item) => {
                info_list.push({
                  id: item.id,
                  goods_id: item.goods_id, //商品id
                  goods_code: item.goods_code,
                  //  商品规格型号
                  goods_note: item.goods_note === null,
                  //  商品单位ID（资料->商品获取商品单位列表，用户选择）
                  goods_unit: item.unit_id,
                  //  数量（默认为1，用户修改）
                  number: item.number,
                  //  基本单位ID（商品详情获取或者通用->商品价格接口获取）
                  default_unit: item.default_unit,
                  //  基本数量（默认为1，多单位时需要换算，或者通过通用->价格变动接口格式化）
                  basic_nmber: item.basic_nmber,
                  //  商品单价（通用->商品价格获取）
                  purchase: item.purchase,
                  //  金额
                  money: item.money,
                  // 编辑商品用到的（展示参数）
                  default_unit_name: item.default_unit_name, //基本单位名称
                  // mes-goods显示中用到的
                  unit_name: item.unit_name, //数量单位
                  goods_image: item.goods_image, //图片
                  goods_name: item.goods_name, //商品名称
                  remark: item.remark //商品备注
                })
              })
              getApp().globalData.goods.list = info_list
            }
          })
      }
    },
    // 获取车间
    async getWorkShop(keyword) {
      this.mandatorForm.keyword = keyword
      const res = await this.$api.source.workshop.index(this.mandatorForm)
      if (res.code == 200) {
        this.MandatorHasMore = res.data.list.length ? true : false
        this.mesFormTop.items.forEach((item) => {
          if (item.title === '车间') {
            item.slots.select.options = [
              ...item.slots.select.options,
              ...res.data.list
            ]
          }
        })
      }
    },
    //获取职员
    getClerk(keyword) {
      this.clerkForm.keyword = keyword
      this.$api.source.staff_member.index(this.clerkForm).then((res) => {
        if (res.code == 200) {
          this.clerkHasMore = res.data.list.length ? true : false
          this.mesFormTop.items.forEach((item) => {
            if (item.title === '生产工人') {
              item.slots.select.options = [
                ...item.slots.select.options,
                ...res.data.list
              ]
            }
          })
        }
      })
    },
    //删除商品
    delGoods(i) {
      getApp().globalData.goods.list.splice(i, 1)
    },
    //编辑页商品
    editGoods(i) {
      let obj = {
        name: 'edit',
        index: i
      }
      obj = JSON.stringify(obj)
      uni.navigateTo({
        url: `/pages/home/productions/goods?obj=${obj}`
      })
    },
    //更新数据
    saveData() {
      this.$refs.formTopRef.validate((valid) => {
        let postForm = {
          id: parseInt(this.id),
          code_type: 1,
          plan_code: this.mesFormTop.row.plan_code, //生产计划编号
          purchase_code: this.mesFormTop.row.purchase_code, //单据编号
          purchase_time: this.mesFormTop.row.purchase_time, //单据时间
          work_time: this.mesFormTop.row.work_time, //交货时间
          finish_time: this.mesFormTop.row.finish_time, //完工时间
          work_id: this.mesFormTop.row.work_id || null, //生产工人id
          workshop_id: this.mesFormTop.row.workshop_id || null, //车间ID
          work_name: this.mesFormTop.row.work_name || null, //生产工人
          remark: this.remark.row.remark || null,
          info_list: []
        }
        let info_list = getApp().globalData.goods.list
        info_list.forEach((item) => {
          postForm.info_list.push({
            // 编辑商品用到的（提交参数）
            // 商品编号（商品详情获取或者通用->商品价格接口获取）
            goods_code: item.goods_code,
            //  商品规格型号
            goods_note: item.goods_note === null,
            //  商品单位ID（资料->商品获取商品单位列表，用户选择）
            goods_unit: item.goods_unit,
            //  数量（默认为1，用户修改）
            number: item.number,
            //  基本单位ID（商品详情获取或者通用->商品价格接口获取）
            default_unit: item.default_unit,
            //  基本数量（默认为1，多单位时需要换算，或者通过通用->价格变动接口格式化）
            basic_nmber: item.basic_nmber,
            //  商品单价（通用->商品价格获取）
            purchase: item.purchase,
            //  金额
            money: item.money,
            // 编辑商品用到的（展示参数）
            default_unit_name: item.default_unit_name, //基本单位名称
            // mes-goods显示中用到的
            unit_name: item.unit_name, //数量单位
            goods_image: item.goods_image, //图片
            goods_name: item.goods_name, //商品名称
            remark: item.remark //商品备注
          })
        })
        postForm.info_list = JSON.stringify(postForm.info_list)
        if (valid) {
          if (!info_list.length) {
            return this.$tools.toast('请选择商品')
          } //
          this.$api.prod.productions.edit(postForm).then((res) => {
            if (res.code == 200) {
              this.$tools.successBack(res.msg)
            }
          })
        }
      })
    },
    // 获取数据
    async getData(option) {
      const res = await this.$api.prod.productions.getdetail({ id: option.id })
      if (res.code == 200) {
        let info_list = []
        console.log(res.data.info_list, '获取到的商品')
        if (res.data.info_list && res.data.info_list.length) {
          res.data.info_list.forEach((item) => {
            info_list.push({
              id: item.id, //每条数据的id
              goods_id: item.goods_id, //商品id
              // 编辑商品用到的（提交参数）
              // 商品编号（商品详情获取或者通用->商品价格接口获取）
              goods_code: item.goods_code,
              //  商品规格型号
              goods_note: item.goods_note === null,
              //  商品单位ID（资料->商品获取商品单位列表，用户选择）
              goods_unit: item.unit_id,
              //  数量（默认为1，用户修改）
              number: item.number,
              //  基本单位ID（商品详情获取或者通用->商品价格接口获取）id
              default_unit: item.default_unit,
              //  基本数量（默认为1，多单位时需要换算，或者通过通用->价格变动接口格式化）
              basic_nmber: item.basic_nmber,
              //  商品单价（通用->商品价格获取）
              purchase: item.purchase,
              //  金额
              money: item.money,
              // 编辑商品用到的（展示参数）
              default_unit_name: item.default_unit_name, //基本单位名称
              // goods_name: item.goods_name //商品名称
              // unit_name: item.unit_name, //商品单位

              // mes-goods显示中用到的
              unit_name: item.unit_name, //数量单位
              goods_image: item.goods_image, //图片
              goods_name: item.goods_name //商品名称
            })
          })
        }
        getApp().globalData.goods.list = info_list
        this.mesFormTop.row = {
          code_type: 1, //单据类型（1：加工单，2：委外加工单）
          plan_code: res.data.plan_code || option.plan_code, //生产计划单号
          purchase_code: res.data.purchase_code, //单据编号
          purchase_time: res.data.purchase_time, //单据时间
          work_time: res.data.work_time, //开工时间
          finish_time: res.data.finish_time, //完工时间
          // workshop_id: res.data.workshop_id, //车间ID
          workshop_name: res.data.workshop_id, ////车间ID
          // work_name: res.data.work_name, //生产工人
          work_id: res.data.work_id //生产工人id
        }
        this.$api.source.workshop
          .index({
            page: -1,
            status: 1
          })
          .then((shop) => {
            if (shop.code == 200) {
              let name = shop.data.list.filter((item) => {
                return this.mesFormTop.row.workshop_name == item.name
              })
              this.mesFormTop.row.workshop_id =
                name.length > 0 ? name[0].id : ''
            }
          })
        this.$api.source.staff_member
          .index({
            page: '-1',
            status: 1
          })
          .then((re) => {
            if (re.code == 200) {
              let name = re.data.list.filter((item) => {
                return this.mesFormTop.row.work_id == item.id
              })
              this.mesFormTop.row.work_name = name[0].name
            }
          })
        this.remark.row = {
          remark: res.data.remark
        }
      }
    }
  },

  onLoad(option) {
    this.getWorkShop() //获取车间
    this.getClerk() //获取职员
    let newObj = JSON.parse(option.obj)
    if (option.obj.name == 'details') {
      this.id = newObj.id
    } else {
      this.id = newObj.id
      this.status = newObj.status
    }
    this.getData(newObj)
  }
}
</script>

<style lang="less" scoped>
</style>
